﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using SoucreGame.DTO;
using SoucreGame.GLO;


namespace SoucreGame.BUS
{
    class CBusiNhanVat
    {
        public CInfoNhanVat NhanVat { get; set; } //Lớp CInfoNhanVat từ DTO(giúp truyền dữ liệu)
        int framTimeLine = 1; //chu kỳ thời gian
        public int thoiGianChet { get; set; } //thời gian chuyển ảnh chết
        public int chuKyNghi { get; set; } //thời gian chuyển anh đứng yên
        public int chuKyDiChuyen { get; set; } //thời gian chuyển anh di chuyển
        public GameTime GameTime { get; set; }
        public ContentManager Content { get; set; }
        public SpriteBatch SpriteBatch { get; set; }
  
        public enum chon { tancong, chet, dungyen,dichuyen }; //danh sách các lựa chọn các hành động của nhân vật
        public chon Hanhdong;

        public virtual void Update(GameTime gameTime)
        {
            
            framTimeLine += (int)gameTime.ElapsedGameTime.TotalMilliseconds;
            switch(Hanhdong)
            {
                case chon.tancong:
                    {
                        TanCong();
                        break;
                    }
                case chon.chet:
                    {
                        Chet();
                        break;
                    }
                case chon.dungyen:
                    {
                        DungYen();
                        break;
                    }
                case chon.dichuyen:
                    {
                        DiChuyen();
                        break;
                    }
            }

            
        }

        /// <hàm thể hiện trạng thái đứng yên của nhân vật>
        /// 
        /// </summary>
        private void DungYen()
        {
            if (framTimeLine >= chuKyNghi)
            {
                NhanVat.SttAnhBatDau++;
                framTimeLine = 0;
                if (NhanVat.SttAnhBatDau >= NhanVat.SoLuongAnhDungYen)
                    NhanVat.SttAnhBatDau = 1;
            }
        }

        /// <hàm thể hiện trạng thái chết của nhân vật>
        /// 
        /// </summary>
        private void Chet()
        {
            if (framTimeLine >= thoiGianChet)
            {
                NhanVat.SttAnhBatDau++;
                framTimeLine = 0;
                if (NhanVat.SttAnhBatDau >= NhanVat.SoLuongAnhChet)
                    NhanVat.SttAnhBatDau = NhanVat.SoLuongAnhChet;
            }
        }

        /// <hàm thể hiện trạng thái đang tấn công của nhân vật>
        /// 
        /// </summary>
        private void TanCong()
        {
            if (framTimeLine >= NhanVat.TocDoTanCong)
            {
                NhanVat.SttAnhBatDau++;
                framTimeLine = 0;
                if (NhanVat.SttAnhBatDau >= NhanVat.SoLuongAnhTanCong)
                    NhanVat.SttAnhBatDau = 1;
            }
        }

        /// <hàm thể hiện trạng thái di chuyển của nhân vật>
        /// 
        /// </summary>
        private void DiChuyen()
        {
            if (framTimeLine >= chuKyDiChuyen)
            {
                NhanVat.SttAnhBatDau++;
                framTimeLine = 0;
                NhanVat.ToaDoHienTai = new Vector2(NhanVat.ToaDoHienTai.X - NhanVat.TocDoDiChuyen, NhanVat.ToaDoHienTai.Y);
                if (NhanVat.SttAnhBatDau >= NhanVat.SoLuongAnhDiChuyen)
                    NhanVat.SttAnhBatDau = 1;
            }
        }
       
        /// <Khởi tạo>
        /// 
        /// </summary>
        /// <param name="conten"></param>
        /// <param name="gameTime"></param>
        /// <param name="sp"></param>
        public CBusiNhanVat(ContentManager conten, GameTime gameTime,SpriteBatch sp)
        {

            this.GameTime = gameTime;
            this.Content = conten;
            this.SpriteBatch = sp;
                NhanVat = new CInfoNhanVat(conten,gameTime,sp);              
                LoadDL();
        }

        /// <Khởi tạo không tham số>
        /// 
        /// </summary>
        public CBusiNhanVat()
        {
            NhanVat = new CInfoNhanVat(Content, GameTime, SpriteBatch);
            LoadDL();
        }

        /// <Khởi gán các giá trị>
        /// 
        /// </summary>
        private void LoadDL()
        {
            this.NhanVat.Ten = NhanVat.Ten;
            this.NhanVat.TocDoTanCong = NhanVat.TocDoTanCong;
            this.NhanVat.TocDoDiChuyen = NhanVat.TocDoDiChuyen;
            this.NhanVat.ToaDoHienTai = NhanVat.ToaDoHienTai;
            this.NhanVat.ToaDoDichDen = NhanVat.ToaDoDichDen;
            this.NhanVat.PhamViTC = NhanVat.PhamViTC;
            this.NhanVat.SucTanCong = NhanVat.SucTanCong;
            this.NhanVat.SucPhongThu = NhanVat.SucPhongThu;
            this.NhanVat.TrangThai = NhanVat.TrangThai;
            this.NhanVat.SttAnhBatDau = NhanVat.SttAnhBatDau;
            this.NhanVat.SoLuongAnhChet = NhanVat.SoLuongAnhChet;
            this.NhanVat.SoLuongAnhTanCong = NhanVat.SoLuongAnhTanCong;
            this.NhanVat.SoLuongAnhDiChuyen = NhanVat.SoLuongAnhDiChuyen;
            this.NhanVat.SoLuongAnhDungYen = NhanVat.SoLuongAnhDungYen;
            this.NhanVat.ChuoiTanCong = NhanVat.ChuoiTanCong;
            this.NhanVat.ChuoiDiChuyen = NhanVat.ChuoiDiChuyen;
            this.NhanVat.ChuoiDungYen = NhanVat.ChuoiDungYen;
            this.NhanVat.ChuoiChet = NhanVat.ChuoiChet;
            if (this.Content != null)
            {
                this.NhanVat.ViTriAnh = NhanVat.ViTriAnh;
                this.NhanVat.AnhNhanVat = NhanVat.AnhNhanVat;
            }

        }
    
        public virtual void Draw(GameTime gameTime)
        {
               switch(Hanhdong)
            {
                case chon.tancong:
                    {
                        this.SpriteBatch.Draw(this.NhanVat.AnhNhanVat, this.NhanVat.ToaDoHienTai, this.NhanVat.ViTriAnh[this.NhanVat.ChuoiTanCong + this.NhanVat.SttAnhBatDau], Color.White);
                        break;
                    }
                case chon.chet:
                    {
                        this.SpriteBatch.Draw(this.NhanVat.AnhNhanVat, this.NhanVat.ToaDoHienTai, this.NhanVat.ViTriAnh[this.NhanVat.ChuoiChet + this.NhanVat.SttAnhBatDau], Color.White); ;
                        break;
                    }
                case chon.dungyen:
                    {
                        this.SpriteBatch.Draw(this.NhanVat.AnhNhanVat, this.NhanVat.ToaDoHienTai, this.NhanVat.ViTriAnh[this.NhanVat.ChuoiDungYen + this.NhanVat.SttAnhBatDau], Color.White);
                        break;
                    }
                   case chon.dichuyen:
                    {
                        this.SpriteBatch.Draw(this.NhanVat.AnhNhanVat, this.NhanVat.ToaDoHienTai, this.NhanVat.ViTriAnh[this.NhanVat.ChuoiDiChuyen + this.NhanVat.SttAnhBatDau], Color.White);
                        break;
                    }
            }

       
        
        }
    }
}
